package com.dod.sso;

import com.microstrategy.web.app.ExternalSecurity;
import com.microstrategy.web.app.AbstractExternalSecurity;
//import com.microstrategy.web.app.LoginForm;
import com.microstrategy.web.beans.RequestKeys;
import com.microstrategy.web.objects.WebObjectsFactory;
import com.microstrategy.web.objects.WebIServerSession;
import com.microstrategy.web.platform.ContainerServices;

//import com.microstrategy.sdk.samples.externalsecurity.CustomLoginValidator;

public class MyCustomExternalSecurity extends AbstractExternalSecurity {
	public MyCustomExternalSecurity() {
		super();
		System.out.println("MyCustomExternalSecurity: Constructor called");
	}

	/* 在用户首次访问MicroStratey Web 的时候，或者是签退后重新访问的时候， 
	 * Web应用会调用实现中的handlesAuthenticationRequest 的方法，其返回值一共三种，
	 * 根据返回的参数的丌同，Web 应用会调用ExternalSecurity 实现中的丌同函
	 * @see com.microstrategy.web.app.AbstractExternalSecurity#handlesAuthenticationRequest(com.microstrategy.web.beans.RequestKeys, com.microstrategy.web.platform.ContainerServices, int)
	 */
	public int handlesAuthenticationRequest(RequestKeys reqKeys,
			ContainerServices cntSvcs, int reason) {
		System.out.println("Method Call:  handlesAuthenticationRequest");
		return ExternalSecurity.COLLECT_SESSION_NOW; //getIServerSession
		//return ExternalSecurity.USE_CUSTOM_LOGIN_PAGE; 执行getCustomLoginURL-》getIServerSession
		//return ExternalSecurity.USE_MSTR_DEFAULT_LOGIN; processMSTRLoginForm
	}

	/* (non-Javadoc)
	 * RequestKeys是对httpRequest 的封装
	 * ContainerServices是对httpSession 的封装
	 * @see com.microstrategy.web.app.AbstractExternalSecurity#getWebIServerSession(com.microstrategy.web.beans.RequestKeys, com.microstrategy.web.platform.ContainerServices)
	 */
	public WebIServerSession getWebIServerSession(RequestKeys reqKeys,
			ContainerServices cntSvcs) {
		System.out.println("Method Call: getWebIServerSession called");
		//在MicroStrategy Web 中要执行一个报表、或者访问一个已知的页面的时候，需要必要的认证信息，从request 或者session 中需要提供的五个最基本认证参数如下：
		// Server ---- Intelligence Server 的HostName 或者IP 地址 
		// Port –--- Interlligence Server 的监听端口，0 表示默认的端口
		// Project –--- 项目名称 
		// Uid –--- MSTR 用户名
		// Pwd –--- MSTR 口令
		WebIServerSession isess = WebObjectsFactory.getInstance()
				.getIServerSession();
		//在具体实现中，MicroStrategy Web 将上面的五个认证基本参数，封装在一个内部对象中WebIServerSession。
		//每个WebIServerSession 的实例代表一个用户的连接，其中WebIServerSession 代表在Intelligence Server 中的一个用户会话，这个会话通过sessionID进行唯一的标识。
		isess.setServerName("localhost");//1为mstr服务器的名称；
		isess.setServerPort(0);//2为服务器端口号，若为默认端口号34952，则设置为“0”；
		//isess.setProjectName("MicroStrategy Tutorial");//3为为mstr中实施单点登录的项目名称；
		//isess.setProjectName("rkpc");//3为为mstr中实施单点登录的项目名称；
		isess.setLogin("Administrator");// 4为登陆该项目的用户名称；
		isess.setPassword("");// 5为登陆该项目的密码。
		System.out
				.println("Method Call: getWebIServerSession finish set isess");
		return isess;
	}

	public String getCustomLoginURL(String originalURL, String desiredServer,
			int desiredPort, String desiredProject) {
		System.out.println("Method Call: getCustomLoginURL called");
		String customURL = "";
		return customURL;
	}

	public boolean isRequestAuthorized(RequestKeys reqKeys,
			ContainerServices cntSvcs, WebIServerSession user) {
		System.out.println("Method Call: isRequestAuthorized called");
		return true;
	}
}
